「Ok,你買了幾本Linux驅動程式的書,然後呢?」
在學習一個新技術時,往往會期待先從一些簡單的例子出發,再逐漸延伸。
不過,如果這個新技術跟Linux核心相關,「一些簡單的例子」可能沒那麼簡單。
如果直接從核心改起,從一些作業系統課常見的名詞出發:行程管理、同步機制、記憶體等,往往會因為更動帶來的影響遍佈整個作業系統,而不知該如何下手。而如果從裝置驅動程式開始,個人電腦的硬體往往缺乏彈性,嵌入式系統則需要另外準備軟、硬體實驗環境、交叉編譯工具鏈等等,也很有可能需要另外使用QEMU之類的模擬器除錯。
要開始寫程式,才能驗證所學。但似乎很難找到簡單實驗環境與例子,那該怎麼辦呢?
別擔心!這本書就是來回答這個問題!
本書內容改編自第12屆iT邦幫忙鐵人賽IoT組冠軍系列文章──《ModernMaker:從那些Maker的大小事看Linux核心》。本書旨在替理解Linux內部提供一個略為不同的切入點,使用創客手邊的RaspberryPi與Arduino,搭配最普遍使用的Ubuntu,作為實驗Linux核心功能的環境。除此之外,本書援引近五年來的諸多研討會作為第一手材料。手上拿著這本書的你,不用買更多材料,今天回家就可以立刻實驗!
本書內容
Chapter1:Ftrace與eBPF,介紹Linux中的兩個動態追蹤機制:由「即時」分支來的ftrace,與近幾年討論度極高的eBPF。這些工具使得讀者僅使用命令列,就能觀察Linux內部的運作。這樣做也容易有「外溢」的效果:如果你在追蹤結果中一直看到某些東西重複出現,自然會好奇這是什麼。於是你就有了一個學新東西的好情境。
Chapter2:裝置樹與Linux裝置框架,介紹裝置樹與Linux裝置模型。一方面是更貼近Maker的經驗:Maker們可能常常在一些感測器、ADC、觸控螢幕的硬體供應商提供說明中,看到疊加裝置樹的指示。介紹裝置樹對於Maker來說,可以更深入理解這件事的目的,是非常有幫助的知識。另一方面,核心模組也可以因為結合裝置模型,許多函式可以使用自動資源管理的版本,也有助於讓程式更精簡。
Chapter3:GPIO,介紹如何在核心中使用GPIO。有了GPIO之後,就能在Chapter4:IRQ中使用GPIO觸發各種IRQ,搭配Chapter1的動態追蹤工具,讓讀者可以親自實驗中斷上半部與下半部機制的執行機制、執行前後文、發生時機等等。本書涵蓋的下半部機制包含了workqueue、softirq、tasklet與threadedIRQ。在理解IRQ之後,相信讀者在閱讀核心文件時,碰到如「該函式無法在不能休眠的情境使用」之類的敘述時,就不會容易感到困惑。
Chatper5:I2C,在介紹核心與使用者空間的I2C相關功能之後,Chatper6:與使用者交換資料中,介紹了字元驅動程式,並且把前述的I2C的傳輸包裝成字元驅動程式。最後則是介紹了專為感測器設計的IIO子系統。多數的ADC、加速規、距離感測器等,有不少可以在IIO子系統中找到驅動程式。
本書使用的硬體
這本書使用Raspberry4B與ArduinoUno。當然,還需要幾條杜邦線。除此之外,為了不讓使用3.3V邏輯電壓的RaspberryPi4B被使用5V邏輯電壓的ArduinoUno破壞,部分實驗需要使用到邏輯準位轉換器(logiclevelshifter)。以及在最後的IIO實驗中,還需要一個TCRT5000紅外線距離感測器,但實際上也可以ArduinoUno替代。除此之外,你不需要更多硬體了。
Ok,準備好了,我們就直接開始吧!
I2C 邏輯 感測器 MAKER IOT ARDUINOUNO PI LINUX IT 工具 RASPBERRY RASPBERRYPI 驅動程式 RASPBERRY4B 作業系統